package com.invernadero.invernaderotesis.Servicios.Services;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

import com.invernadero.invernaderotesis.R;
import com.invernadero.invernaderotesis.Presentacion.Principal;
import com.invernadero.invernaderotesis.Servicios.Services.SolicitudServicio.LocalBinder;
import com.invernadero.invernaderotesis.Servicios.ServiciosWeb.Rest.Recibir.SolicitarLuminocidad;
import com.invernadero.invernaderotesis.Servicios.ServiciosWeb.Rest.Recibir.SolicitarTanqueAgua;
import com.invernadero.invernaderotesis.Servicios.ServiciosWeb.Rest.Recibir.SolicitudCliente;

public class SolicitudServicioCapasInvernadero extends Service {
	
	private NotificationManager mNM;
	private int idIntent;
	private int TipoAcccion;
	private int TipoServicio;
    private String usuario    = "";
    private String contrasena ="";
	private Timer timer;
	 
    //Numero de identificacion unico para la Notificacion
    //Lo usamos para iniciar y cancelar la Notificacion
    private int NOTIFICATION = R.string.local_service_started;
    //Clase de acceso para los clientes. 
    //Como sabemos que este servicio siempre se ejecuta en el mismo proceso, no es necesario tratar con IPC
    public class LocalBinder extends Binder{    
    	SolicitudServicioCapasInvernadero getService(){
            return SolicitudServicioCapasInvernadero.this;
        }
    }
    
    @Override
    public void onCreate(){
    	
       // mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
       // timer = new Timer();
          
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags,int startId){
        Log.i("Solicitud de servicio", "Recibido con id "+startId+": "+intent);
        idIntent = startId;
        // verificamos el tipo de servicio a ejecutar
        verificarServicio(intent);
      
        //Queremos que el servicio continue ejecutandose hasta que es explicitamente parado, asi que devolvemos sticky
        return START_STICKY;    
    }
    
    @Override
    public void onDestroy(){
    	// verificamos el estado del timer
    	//if (timer != null) { timer.cancel(); }
        //Cancelamos la notificacion persistente
       // mNM.cancel(NOTIFICATION);
        //Informamos al usuario que hemos parado el notification
        //Toast.makeText(this,R.string.local_service_stopped, Toast.LENGTH_SHORT).show();
         //colocamos en el log que fue detenido el "Timer"
        Log.i("Servicio de SOLICITUD CAPAS INVERADERO", "El Servicio se detuvo ha sido detenido con el ID INTENT: "+idIntent);
    }
    
    @Override
    public IBinder onBind(Intent intent){
        return mBinder; 
    }
 
    //Este es el objeto que recibe interacciones de los clientes. 
    private final IBinder mBinder = new LocalBinder();
 
    
    /**
     *   Mostramos la notificacion mientras el servicio se esta ejecutando
     */
    private void showNotification(){
        CharSequence text = getText(R.string.local_service_started);
        //Ajustamos el icono, desplazamiento del texto y la hora y fecha
        Notification notification = new Notification(R.drawable.ic_launcher, text, System.currentTimeMillis());
        //PendingIntent para lanzar nuestra actividad si el usuario selecciona esta notificacion
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, Principal.class), 0);
        //Ajustamos la informacion para mostrar en el panel de notificacion
        notification.setLatestEventInfo(this, getText(R.string.local_service_label), text, contentIntent);
        //Enviamos la notificacion
        mNM.notify(NOTIFICATION, notification); 
    }
    
    /**
     * Verificamos el tipo de servicio a ejecutar
     * @param intent
     */
    private void verificarServicio(Intent intent){
    	
        TipoAcccion  = intent.getIntExtra("_idTipoAcccion", 0);
        TipoServicio = intent.getIntExtra("_idTipoServicio", 0);
        
        switch (TipoServicio){
	        case 1:
	        	//Mostramos una notificacion sobre el inicio. Ponemos un icono en la barra de estado.
	                showNotification();
		    	// invocamos a la fabrica de servicio dependiendo del tipo de servicio	        	
	        	 
		    	break;
		    	
	        case 2:
		    	// invocamos a la fabrica de servicio dependiendo del tipo de servicio
	        	SolicitudCliente sc = new SolicitudCliente(usuario,contrasena);
                sc.solicitarInformacionCliente();
                this.stopService(intent);
                
		    	break;

            case 3:
                // invocamos el servicio web para consultar a los clientes
                SolicitudCliente sc1 = new SolicitudCliente(usuario,contrasena);
                sc1.solicitarInformacionCliente();
                this.stopService(intent);
                break;
                
		    // informacion de envio para CERRAR o ABRIR el techo del inverdero
            case 4:
            	// instanciamos un objeto del tipo de "SolicitarLuminocidad"
                SolicitarLuminocidad sclu = new SolicitarLuminocidad();
                sclu.solicitarInformacionLuminocidad();
                this.stopService(intent);
            	break;
            	
           // informacion de envio para CERRAR o ABRIR el Tanque de agua
            case 5:
            	// instanciamos un objeto del tipo de "SolicitarTanqueAgua"
                SolicitarTanqueAgua scTanque = new SolicitarTanqueAgua();
                scTanque.solicitarInformacionTanqueAgua();
                this.stopService(intent);
            	break;
	        default:
    	    	break;
        }
        
        
    }
    /**
     * Verificamos la solocitud de los clientes
     * @return
     */
    private Boolean verificarSolicitud(){

        
    	switch (TipoAcccion){
    	
    	    case 1:
    	    	// invocamos a la fabrica de servicio dependiendo del tipo de servicio
    	    	break;
    	    case 2:
    	    	// invocamos a la fabrica de servicio dependiendo del tipo de servicio
    	    	Toast.makeText(this, "Tarea finalizada!", Toast.LENGTH_SHORT).show();
    	    	break;
    	    	
    	    default:
    	    	break;
    	    	
    	}
    	
    	return (true);
    }
}   

